﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Drawing.Printing;


namespace FrontEndPlus.Módulos.Inventarios
{
    public partial class wbfrm_CuentasPorCobrar : System.Web.UI.Page
    {
        #region Variables

        private WCF_Gimnasio.cls_Cuentas_Por_Cobrar _cuenta = new WCF_Gimnasio.cls_Cuentas_Por_Cobrar();
        private WCF_Gimnasio.ServiceClient _servicio = new WCF_Gimnasio.ServiceClient();
        private WCF_Gimnasio.cls_Empresas _empresa = new WCF_Gimnasio.cls_Empresas();

        private String mensaje_error = String.Empty;

        #endregion
        #region Metodos
        private void CargarEmpresas()
        {
            try
            {
                _empresa.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());
                gv_empresas.DataSource = _servicio.Listar(4, _empresa);
                gv_empresas.DataBind();
                if (gv_empresas.Rows.Count <= 0)
                    lbl_mensaje.Text = "NO EXISTEN EMPRESAS REGISTRADAS";
                else
                    lbl_mensaje.Text = string.Empty;
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }

        }
        private void CargarCuentas()
        {
            try
            {
                _cuenta.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());
                _cuenta.IdEmpresa = Convert.ToInt32(txt_idEmpresa.Text);
                gv_cuentasCobrar.DataSource = _servicio.Listar(5, _cuenta);
                gv_cuentasCobrar.DataBind();
                if (gv_cuentasCobrar.Rows.Count <= 0)
                {
                    string mensaje = "<script type='text/javascript'> smoke.alert('La empresa no tiene cuentas pendientes', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", mensaje, false);
                }
                    
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }

        }
        private void cargaDatosCuentas(int fila)
        {
            try
            {
                _cuenta.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());
                _cuenta.IdCuenta = Convert.ToInt32(gv_cuentasCobrar.Rows[fila].Cells[1].Text);

                _cuenta = (WCF_Gimnasio.cls_Cuentas_Por_Cobrar)_servicio.TraerObjeto(_cuenta);

                txt_monto.Text = string.Format("{0:N}",_cuenta.Monto);
                txt_intereses.Text = string.Format("{0:N}",this.Calcular_Intereses(_cuenta.FechaVencimiento, _cuenta.Monto));
                txt_total.Text = string.Format("{0:N}",(_cuenta.Monto + Convert.ToDecimal(txt_intereses.Text)));
                txt_descripcion.Text = _cuenta.Descripcion;
                if (txt_total.Text != string.Empty)
                    this.HabilitarDeshabilitar(1);
                else
                    this.HabilitarDeshabilitar(2);
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }    
        }
        private void cargaDatosEmpresa(int fila)
        {
            try
            {
                txt_monto_pagado.Text = String.Empty;
                txt_comprobante.Text = String.Empty;
                _empresa.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());
                _empresa.IdEmpresa = Convert.ToInt32(gv_empresas.Rows[fila].Cells[1].Text);
                _empresa = (WCF_Gimnasio.cls_Empresas)_servicio.TraerObjeto(_empresa);

                txt_idEmpresa.Text = _empresa.IdEmpresa.ToString();
                txt_nombre_empresa.Text = _empresa.Nombre;
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }
        private void HabilitarDeshabilitar(int accion)
        {
            try
            {
                if (accion == 1)
                {
                    txt_fecha.Enabled = true;
                    txt_fecha.Text = DateTime.Now.ToShortDateString();
                    ddl_tipo_pago.Enabled = true;
                    txt_descripcion_pago.Enabled = true;
                    btn_generar.Enabled = true;
                    chk_imprimir.Enabled = true;
                }
                else
                    if (accion == 2)
                    {
                        txt_monto.Text = String.Empty;
                        txt_intereses.Text = String.Empty;
                        txt_total.Text = String.Empty;
                        txt_descripcion.Text = String.Empty;
                        txt_fecha.Enabled = false;
                        txt_fecha.Text = String.Empty;
                        ddl_tipo_pago.SelectedIndex = -1;
                        ddl_tipo_pago.Enabled = false;
                        txt_descripcion_pago.Text = String.Empty;
                        txt_descripcion_pago.Enabled = false;
                        btn_generar.Enabled = false;
                        chk_imprimir.Enabled = false;
                        gv_cuentasCobrar.SelectedIndex = -1;
                        gv_cuentasCobrar.DataSource = null;
                        gv_cuentasCobrar.DataBind();
                        gv_empresas.SelectedIndex = -1;
                        txt_comprobante.Text = String.Empty;
                        txt_monto_pagado.Text = String.Empty;
                        txt_idEmpresa.Text = String.Empty;
                        txt_nombre_empresa.Text = String.Empty;

                    }
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }
        private String convertirFecha(string fecha)
        {
            try
            {
                string fechaNueva = string.Empty;
                string mes = fecha.Substring(0, 2);
                string dia = fecha.Substring(3, 2);
                string año = fecha.Substring(6, 4);
                fechaNueva = dia + "/" + mes + "/" + año;
                return fechaNueva;
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; return String.Empty; }
        }
        private void guardarPago()
        {
            try
            {
                _cuenta.IdEmpresa = Convert.ToInt32(txt_idEmpresa.Text);
                _cuenta.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());
                _cuenta.IdCuenta = Convert.ToInt32(gv_cuentasCobrar.Rows[gv_cuentasCobrar.SelectedIndex].Cells[1].Text);
                _cuenta.Intereses = Convert.ToDecimal(txt_intereses.Text);
                _cuenta.Total = Convert.ToDecimal(txt_total.Text);
                _cuenta.Descripcion = txt_descripcion_pago.Text;
                _cuenta.TipoPago = ddl_tipo_pago.SelectedValue;
                _cuenta.FechaPago = Convert.ToDateTime(txt_fecha.Text);
                _cuenta.Monto = Convert.ToDecimal(txt_monto.Text);
                _cuenta.Pago = true;
                _servicio.InsertarActualizarRegistro(true, ref mensaje_error, _cuenta);
                if (mensaje_error != String.Empty)
                    lbl_mensaje.Text = mensaje_error;
                else
                {
                    _cuenta.IdEstado = 13;
                    _servicio.InsertarActualizarRegistro(false, ref mensaje_error, _cuenta);
                    this.HabilitarDeshabilitar(2);
                    object resultado = new object();
                    _cuenta.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());
                    _servicio.OtrosProcesos(1, ref resultado, _cuenta);
                    if (chk_imprimir.Checked)
                    {
                        _cuenta.IdComprobante = Convert.ToInt32(resultado);
                        this.Imprimir_Comprobante();
                    }
                    else
                    {
                        txt_comprobante.Text = resultado.ToString();
                        txt_monto_pagado.Text = string.Format("{0:N}",_cuenta.Total);
                        string mensaje = "<script type='text/javascript'> smoke.alert('Transaccion Procesada', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                        ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", mensaje, false);
                    }


                }
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }
        private void Imprimir_Comprobante()
        {
            try
            {
                DataSet Dataset_Resultado = _servicio.Listar(4, _cuenta);

                if (Dataset_Resultado.Tables[0].Rows.Count > 0)
                {
                    Dataset_Resultado.WriteXml("C:\\temp\\comprobante.xml", XmlWriteMode.WriteSchema);

                    Response.Redirect("wbfrm_reporte.aspx?nombre=CR_Impresion.rpt&email=&bandera=1");
                }
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }
        private Decimal Calcular_Intereses(DateTime fecha_vencimiento,decimal monto)
        {
            DateTime fecha_actual = DateTime.Now.Date;
            decimal intereses = 0;
            int diferencia = fecha_actual.Subtract(fecha_vencimiento).Days;            
            if (diferencia > 0)
            {
                intereses = Convert.ToDecimal(diferencia * (((double)monto / 100) * 0.5));
            }

            return intereses;

        }
        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.CargarEmpresas();
            }

        }

        protected void b_generar_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                this.guardarPago();
            }
        }

        protected void btn_limpiar_Click(object sender, EventArgs e)
        {
            this.HabilitarDeshabilitar(2);
        }

        protected void b_volver_Click(object sender, EventArgs e)
        {
            Response.Redirect("wbfrm_Index.aspx");
        }
        protected void gv_cuentasCobrar_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int fila = Convert.ToInt32(e.CommandArgument);
                this.cargaDatosCuentas(fila);
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }

        protected void txt_fecha_TextChanged(object sender, EventArgs e)
        {
            txt_fecha.Text = this.convertirFecha(txt_fecha.Text);
        }
        protected void gv_empresas_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int fila = Convert.ToInt32(e.CommandArgument);
                this.cargaDatosEmpresa(fila);
                this.CargarCuentas();
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }
    }
}